c++ - C++ 中复杂的 Typedef
全部标签 我发现了几个关于C++0x中模板类型定义的问题,这些问题通过using关键字解决;然而,使用GCC4.6.1(运行g++-std=c++0x),我得到以下错误:错误:在“使用”之前需要不合格的id你能帮我找出我哪里出错了吗?几个小时以来我一直在努力解决这个问题......代码:#includetemplateclassGenericSparseVector{protected:std::mapindices_to_values;};templateusingStandardSparseVector=GenericSparseVector; 最佳答案
最近我在看一个类(class)的旧烂摊子......长话短说,如果一个成员是常量,将有助于线程安全。但问题是member是在ctor中初始化的,而且是非平凡的构造。所以我在考虑为那个成员创建一个特殊的初始化函数。这是一个好的决定吗?super简单的小例子(真正的代码充满了条件:)和try-s):classComplexInitList{std::pairinit_pair(constintfirst,constintsecond){if((first==0)||(second==0))throwstd::invalid_argument("divby0");returnstd::mak
我试图在不使用typedef的情况下返回指向函数的指针,但编译器(gcc)发出了一个奇怪的错误,就好像我无法进行那种设置一样。备注:使用typedef代码有效。代码:voidcatch_and_return(void(*pf)(char*,char*,int&),char*name_one,char*name_two,int&number)(char*,char*,int&){pf(name_one,name_two,number);returnpf;}错误:'catch_and_return'声明为返回函数的函数你能给我解释一下为什么编译器不允许我这样做吗?谢谢!
假设我想要一个接收一些参数的构造函数,并且使用这些参数我可以计算它的成员变量的值。除了成员变量的值不是来自参数的简单赋值。它们需要创建其他对象并转换值,然后才能将它们用作成员变量的值。要塞进一个初始化列表就太麻烦了。效率也非常低,因为您无法创建变量并重用它们,因此您将不得不复制代码(并制作同一对象的多个拷贝)以适应初始化列表中的所有代码。另一种选择是不使用初始化列表,让默认构造函数被调用,然后用简洁的计算覆盖构造函数中的值。如果类没有默认构造函数怎么办?如何巧妙地做到这一点?/*aclasswithoutadefaultconstructor*/classA{public:Bx1Bx2
这个问题在这里已经有了答案:Typedefashared_ptrtypewithastaticcustomdeleter,similartounique_ptr(2个答案)关闭7年前。我正在使用SDL2开发C++应用程序,并希望使用shared_ptr来保存指针内容。所以我做例如这个:typedefstd::shared_ptrSDLWindowPtr;而且我需要在整个过程中使用自定义删除器。是否可以将其包含在typedef中?如果是,如何?删除函数称为SDL_DestroyWindow。如果没有,如何让shared_ptr使用SDL_DestroyWindow作为自定义删除函数?提前
假设我有一个封装了一个(或多个)成员的类,它必须以某种方式被初始化,没有它就没有合理的方法来使用这个类(所以我不想让它成为可选的).像这样在其构造函数中运行初始化是否更好:classMyClass{MyClass(){if(!obj.initialize()throw...;}private:MyObjectobj;}或者您会建议以下设计:classMyClass{MyClass(){}boolinitialize(){returnobj.initialize();}private:MyObjectobj;}第一个看起来很有吸引力,因为我可以保证在构造函数运行后满足使用我的类的所有要求
如标题所问,用作堆栈的std::vector与std::stack之间是否存在时间或空间差异? 最佳答案 std::stack包装另一个容器。如果堆栈的后备容器是std::vector,则没有,没有区别。然而,默认的后备容器是一个std::deque,它可以有不同的存储和计时行为参见std::stack详情 关于c++-用作堆栈的std::vector和std::stack之间是否存在任何复杂性差异?,我们在StackOverflow上找到一个类似的问题: h
抱歉,标题太长了。我在类列表中有一个typedef:templateclassList{//ThinkofaclassIter_withListElem*pCurrentPosandList*pListtypedefconstIter_const_iterator;const_iteratorcbegin()const;};以及在类之外但在头文件内的定义。templatetypenameList::const_iteratorList::cbegin()const{}这会产生错误C2373:Redefinition;不同的类型修饰符我重写了这个函数:templateconsttypen
我有一个包含私有(private)typedef和几个成员的类功能:classFoo{private:typedefstd::blahblahFooPart;FooPartm_fooPart;...public:intsomeFn1();intsomeFn2();};几个成员函数需要以类似的方式使用m_fooPart,所以我想把它放在一个函数中。我将辅助函数放在匿名中命名空间,但在这种情况下,他们需要知道什么FooPart是。所以,我这样做了:namespace{templateinthelperFn(constT&foopart,intindex){...returnfoopart.
我想在模板类中定义一个类型名称,我可以在其他地方使用它来引用类中成员的类型。templateclassCA{public://typedeftypenameT::iteratoriterator_type;typedeftypenameTElementType1;//compileerroronthisline//typedefTElementType2;Tm_element;};并像这样使用它:templateclassCDerived:publicCBase{//...};并声明如下对象:typedefCDerivedMyNewClass;这不可能吗?我有一些代码可以在VS2010